package main

import "fmt"

// 数组是值类型
// 【】如果当参数传递会拷贝数组进行值传递，再其他大部分语言中都不是这样的，一般都是引用传递，可以使用指针传递，所以go语言我们一般不直接使用数组，主要使用切片【】
// 此处的参数 [5]int 和 []int 是两个完全不同的概念，[5]int 是数组 []int 是切片
func printArray(arr [5]int) {
	for _, v := range arr {
		fmt.Println(v)
	}
}

// 基础练习
func array() {
	// 定义的数组默认会被填上0
	var arr1 [5]int           //直接定义数组可以不赋值
	arr2 := [3]int{1, 3, 5}   // 这种定义需要直接赋值
	arr3 := [...]int{2, 4, 6} // 这种方式可以让编译器帮我们数数组长度
	var grid [4][5]int        // 定义多为数组4行5列的数组
	fmt.Println(arr1, arr2, arr3, grid)

	// 遍历数组
	for i := 0; i < len(arr3); i++ {
		fmt.Println(arr3[i])
	}
	// 使用range获取数组的下标进行循环
	for i := range arr3 {
		fmt.Println(arr3[i])
	}
	// 获取rangge获取下标和值
	for i, v := range arr3 {
		fmt.Println(i, ":", v)
	}
	// 获取rangge获取值不需要下标则可以使用_代替
	for _, v := range arr3 {
		fmt.Println(v)
	}
}

func main() {
	var arr1 [5]int
	// arr2 := [3]int{1, 3, 5}
	// array()
	printArray(arr1)
	// printArray(arr2) //此处会报错，因为arr2的长度和函数参数长度不一致，是不同的类型
}
